package P114_NotThrowExcepInConstructor;

import org.junit.Test;

import java.io.IOException;

/**
 * @ClassName : NotThrowExcepInConstructor
 * @Description : 不要在构造函数中抛出异常
 * @Author : wukj1
 * @Date: 2022/5/4
 **/
public class NotThrowExcepInConstructor {

    /**
     Java的异常机制有三种： 1、Error类及其子类表示的错误
                         2、RuntimeException类及其子类表示的是非受检异常
                         3、Exception类及其子类（不包含非受检异常）表示的是受检异常
     */

    @Test
    public void test(){
//        Person person = new Person(17);
//        person.applyBankCard();
//        /*其他逻辑处理*/

        //违背了里氏替换原则
        try {
            Base base = new Sub();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

class Person{
    public Person(int age) {
        if(age < 18){
            throw new RuntimeException("年龄必须大于18岁。");
        }
    }

    public void applyBankCard(){
        System.out.println("办银行卡");
    }
}

class Base{
    //父类抛出IOException异常
    public Base() throws IOException {
        throw new IOException();
    }

    public void method() throws Exception{

    }
}

class Sub extends Base{
    //子类抛出异常
    public Sub() throws Exception {

    }

    @Override
    public void method() throws IOException {

    }
}
